<?php

/**
 * Token相关控制器
 */

namespace app\common\token;

use app\BaseController;
use Firebase\JWT\JWT;
use think\facade\Env;

class TokenService extends BaseController
{
    /**
     * 获取token
     *
     * @param [type] $user_id
     * @return void
     */
    public static function getToken($user_id)
    {
        $access_token_arr = [
            'user_id'     => $user_id,
            'expire_time' => strtotime('+10 day') // access_token的过期时间为10天
        ];
        $access_jwt_token = JWT::encode($access_token_arr, config('system.access_jwt_key'));
        return $access_jwt_token;
    }

    /**
     * 检验token
     *
     * @param [type] $token
     * @return void
     */
    public static function checkToken($token)
    {
        //判断token是否为非法的token
        $access_jwt_key = config('system.access_jwt_key');

        try {
            $token_arr = (array)JWT::decode($token, $access_jwt_key, array('HS256'));
        } catch (\UnexpectedValueException $exception) {
            error('Invalid AccessToken', [], 401);
        }

        if (empty($token_arr)) {
            error('Invalid AccessToken', [], 401);
        } else {
            //判断token是否非法的
            if (isset($token_arr['user_id']) && isset($token_arr['expire_time'])) {
                if (!empty($token_arr['user_id']) && !empty($token_arr['expire_time'])) {
                    //判断时间是否过期
                    if (time() <= $token_arr['expire_time']) {
                        return $token_arr['user_id'];
                    } else {
                        error('登录认证过期', [], 402);
                    }
                } else {
                    error('Invalid AccessToken', [], 401);
                }
            } else {
                error('Invalid AccessToken', [], 401);
            }
        }
    }
}
